/**
 * 60. 排列序列
 * 
 * 给出集合 [1,2,3,...,n]，其所有元素共有 n! 种排列。
 * 按大小顺序列出所有排列情况，并一一标记，当 n = 3 时, 所有排列如下：
 * "123"
 * "132"
 * "213"
 * "231"
 * "312"
 * "321"
 * 给定 n 和 k，返回第 k 个排列。
 * 
 * 示例 1：
 * 输入：n = 3, k = 3
 * 输出："213"
 * 
 * 示例 2：
 * 输入：n = 4, k = 9
 * 输出："2314"
 * 
 * 示例 3：
 * 输入：n = 3, k = 1
 * 输出："123"
 * 
 * 提示：
 * 1 <= n <= 9
 * 1 <= k <= n!
 * 
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/permutation-sequence
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * 
 */

package zw;

import java.util.ArrayList;

public class T60 {
	public String getPermutation(int n, int k) {
		String ans = "";
		ArrayList<Integer> intList = new ArrayList<>();
		for(int i = 1; i <= n; i++) {
			intList.add(i);
		}
		int pos = 0;
		
		while(k > 0 && n > 0) {
			if(k <= factorial(n-1)) {
				ans += intList.get(pos);
				intList.remove(pos);
				n--;
				pos = 0;
			} else {
				k -= factorial(n-1);
				pos++;
			}
		}
		return ans;
    }
	
	private int factorial(int n) {
		int res = 1;
		while(n > 0) {
			res *= n;
			n--;
		}
		return res;
	}
	
	public static void main(String[] args) {
		T60 t60 = new T60();
	 	System.out.print(t60.getPermutation(1, 1));
	}
}
